/*
  数字转化汉字函数
  @params number: 传入的数字
  @params isSimplified: 返回汉字是否为简体
*/
function numberToChinese (number, isSimplified = true) {
  // 分割数字成数组
  const numberArray = String(number).split('')
  // 对应的汉字数组
  const chineseArray = isSimplified
    ? ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
    : ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾']
  // 返回出去的汉化数字
  let returnNumber = ''
  // 判断数字单位
  switch (numberArray.length) {
    case 1:
      returnNumber = chineseArray[number]
      break
    case 2:
      // 汉化十位的数字，去一
      numberArray[0] =
        numberArray[0] === '1'
          ? chineseArray[10]
          : chineseArray[numberArray[0]] + chineseArray[10]
      // 汉化个位的数字，去零
      numberArray[1] =
        numberArray[1] === '0' ? '' : chineseArray[numberArray[1]]
      // 拼接十位和个位的数字
      returnNumber = numberArray[0] + numberArray[1]
      break
    case 4:
      numberArray.forEach(value => {
        returnNumber += chineseArray[value]
      })
      break
    default:
      break
  }
  // 将汉化后的数字返回出去
  return returnNumber
}

/*
  填充数组函数
  @params array: 需要填充的数组
  @params length: 数组预设长度
  @params value: 数组第一个元素
  @params unit: 元素需要拼接的单位
  @params count: 停止递归条件初始值
*/
function pushArray (array = [], length, value, unit = '', count = 1) {
  // 数字汉化后拼接刻度单位再填充入数组
  array.push(numberToChinese(value++, true) + unit)
  // 计数递归
  if (count++ < length) {
    pushArray(array, length, value, unit, count)
  }
  // 返回刻度轮数组
  return array
}

/*
  获取年轮函数
  @params year: 年份
  */
function getYearRing (year) {
  // 数组第一个元素
  const firstValue = year - ((year % 12) - 4)
  // 调用函数填充数组
  const array = pushArray([], 12, firstValue, '年')
  return array
}

/*
获取日轮函数
@params year: 年份
@params month: 月份
*/
function getDayRing (year, month) {
  // 日轮长度
  let dayLength = 0
  switch (month) {
    case 2:
      dayLength =
        (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 ? 29 : 28
      break
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      dayLength = 31
      break
    default:
      dayLength = 30
      break
  }
  // 调用函数填充数组
  const array = pushArray([], dayLength, 1, '日')
  return array
}

// 月轮
const monthRing = pushArray([], 12, 1, '月')

// 星期轮
const weekRing = [
  '星期一',
  '星期二',
  '星期三',
  '星期四',
  '星期五',
  '星期六',
  '星期天'
]

// 时轮
const hourRing = pushArray([], 24, 0, '时')

// 分轮
const minuteRing = pushArray([], 60, 0, '分')

// 秒轮
const secondRing = pushArray([], 60, 0, '秒')

/*
  获取时间列表函数
  @params year: 年份
  @params month: 月份
*/
export function getTimeList (year, month) {
  return {
    yearList: getYearRing(year),
    monthList: monthRing,
    dayList: getDayRing(year, month),
    weekList: weekRing,
    hourList: hourRing,
    minuteList: minuteRing,
    secondList: secondRing
  }
}

/*
  获取当前时间函数
  @params time: 时间构造函数
*/
export function getTimeNow (time) {
  return {
    year: time.getFullYear(),
    month: time.getMonth() + 1,
    day: time.getDate(),
    week: time.getDay(),
    hour: time.getHours(),
    minute: time.getMinutes(),
    second: time.getSeconds(),
    millisecond: time.getMilliseconds()
  }
}
